//import io.netty.bootstrap.Bootstrap;
//import io.netty.bootstrap.ServerBootstrap;
//import io.netty.channel.*;
//import io.netty.channel.nio.NioEventLoopGroup;
//import io.netty.channel.socket.nio.NioServerSocketChannel;
//import io.netty.channel.socket.nio.NioSocketChannel;
//import io.netty.handler.codec.http.*;
//
//public class HttpForwardingServer {
//
//    private final int port;
//
//    public HttpForwardingServer(int port) {
//        this.port = port;
//    }
//
//    public void start() throws Exception {
//        EventLoopGroup bossGroup = new NioEventLoopGroup();
//        EventLoopGroup workerGroup = new NioEventLoopGroup();
//        try {
//            ServerBootstrap bootstrap = new ServerBootstrap();
//            bootstrap.group(bossGroup, workerGroup)
//                     .channel(NioServerSocketChannel.class)
//                     .childHandler(new ChannelInitializer<Channel>() {
//                         @Override
//                         protected void initChannel(Channel ch) {
//                             ChannelPipeline pipeline = ch.pipeline();
//                             pipeline.addLast(new HttpServerCodec());
//                             pipeline.addLast(new HttpObjectAggregator(1048576));
//                             pipeline.addLast(new HttpForwardingHandler());
//                         }
//                     });
//
//            ChannelFuture future = bootstrap.bind(port).sync();
//            System.out.println("Server started on port: " + port);
//            future.channel().closeFuture().sync();
//        } finally {
//            workerGroup.shutdownGracefully();
//            bossGroup.shutdownGracefully();
//        }
//    }
//
//    public static void main(String[] args) throws Exception {
//        int port = 8080; // 监听的端口
//        new HttpForwardingServer(port).start();
//    }
//}
//
//class HttpForwardingHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
//
//    @Override
//    protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest req) throws Exception {
//        // 使用 Netty 发送 HTTP 请求
//        sendHttpRequest(req, ctx);
//    }
//
//    private static void sendHttpRequest(FullHttpRequest req, ChannelHandlerContext ctx) {
//        // 创建新的 EventLoopGroup
//        EventLoopGroup group = new NioEventLoopGroup();
//        try {
//            Bootstrap bootstrap = new Bootstrap();
//            bootstrap.group(group)
//                     .channel(NioSocketChannel.class)
//                     .handler(new HttpClientInitializer(ctx, req));
//
////            // 连接目标服务器
////            ChannelFuture future = bootstrap.connect("localhost",8888).sync();
////            // 创建 HTTP 请求
////            FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/m2");
////            request.headers().set(HttpHeaderNames.HOST, "localhost:8888");
//
//            // 连接目标服务器
//            ChannelFuture future = bootstrap.connect("www.baidu.com",80).sync();
//            // 创建 HTTP 请求
//            FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
//            request.headers().set(HttpHeaderNames.HOST, "www.baidu.com");
//
//            request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE);
//            // 发送请求
//            future.channel().writeAndFlush(request);
//            // 等待关闭连接
//            future.channel().closeFuture().sync();
//        } catch (Exception e) {
//            e.printStackTrace();
//            ctx.close();
//        } finally {
//            group.shutdownGracefully();
//        }
//    }
//
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
//        cause.printStackTrace();
//        ctx.close();
//    }
//}
//
//class HttpClientInitializer extends ChannelInitializer<Channel> {
//    private final ChannelHandlerContext ctx;
//    private final FullHttpRequest originalRequest;
//
//    public HttpClientInitializer(ChannelHandlerContext ctx, FullHttpRequest originalRequest) {
//        this.ctx = ctx;
//        this.originalRequest = originalRequest;
//    }
//
//    @Override
//    protected void initChannel(Channel channel) {
//        ChannelPipeline pipeline = channel.pipeline();
//        pipeline.addLast(new HttpClientCodec());
//        pipeline.addLast(new HttpObjectAggregator(1048576));
//        pipeline.addLast(new HttpClientHandler(ctx, originalRequest));
//    }
//}
//
//class HttpClientHandler extends SimpleChannelInboundHandler<FullHttpResponse> {
//    private final ChannelHandlerContext ctx;
//    private final FullHttpRequest originalRequest;
//
//    public HttpClientHandler(ChannelHandlerContext ctx, FullHttpRequest originalRequest) {
//        this.ctx = ctx;
//        this.originalRequest = originalRequest;
//    }
//
//    @Override
//    protected void channelRead0(ChannelHandlerContext channelHandlerContext, FullHttpResponse response) throws Exception {
//        // 转发响应给客户端
//        ctx.writeAndFlush(response.retain()); // 保持响应内容
//    }
//
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
//        cause.printStackTrace();
//        ctx.close();
//    }
//}
